import Vue from 'vue'

import Cookies from 'js-cookie'

import 'normalize.css/normalize.css' // a modern alternative to CSS resets

import Element, {Message, MessageBox} from 'element-ui'
import './styles/element-variables.scss'
// import enLang from 'element-ui/lib/locale/lang/en'// 如果使用中文语言包请默认支持，无需额外引入，请删除该依赖

import '@/styles/index.scss' // global css

import App from './App'
import store from './store'
import router from './router'
import i18n from './lang' // internationalization

import './icons' // icon
import './permission' // permission control
import './utils/error-log' // error log

import * as filters from './filters' // global filters


// 解决js计算精度丢失问题
import cal from '@/utils/calculation';
Vue.prototype.$cal = cal

// 自动计算表格高度
import tableHeight from '@/utils/tableHeight';
Vue.use(tableHeight);

import tableHeightV2 from '@/utils/tableHeightV2';
Vue.use(tableHeightV2);

// 添加权限命令到全局
import permission from '@/directive/permission/index.js' // 权限判断指令
Vue.directive('permission',permission)

/**
 * If you don't want to use mock-server
 * you want to use MockJs for mock api
 * you can execute: mockXHR()
 *
 * Currently MockJs will be used in the production environment,
 * please remove it before going online ! ! !
 */
if (process.env.NODE_ENV === 'production') {
  const { mockXHR } = require('../mock')
  mockXHR()
}

Vue.use(Element, {
  size: Cookies.get('size') || 'small', // set element-ui default size
  i18n: (key, value) => i18n.t(key, value)
  // locale: enLang // 如果使用中文，无需设置，请删除
})
import DiyLink from "@/components/DiyLink/index"
Vue.component('diy-link',DiyLink)


// register global utility filters
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
})

Vue.config.productionTip = false


// 提示封装
Vue.prototype.$Message = opt => {
  Message(opt);
}
Vue.prototype.$eMsg = Vue.prototype.$errorMessage = (message, duration = 3000) => {
  Message({
    message,
    duration,
    type: 'error',
  })
}
Vue.prototype.$sMsg = Vue.prototype.$successMessage = (message, duration = 3000) => {
  Message({
    message,
    duration,
    type: 'success',
  })
}
Vue.prototype.$warning = (message,options = {}) => {
  const defaultOptions = {
    confirmButtonText: i18n.t('common.confirm'),
    cancelButtonText: i18n.t('common.cancel'),
    type: 'warning',
  }
  options.confirmButtonText = options.confirmButtonText ? options.confirmButtonText : defaultOptions.confirmButtonText
  options.cancelButtonText = options.cancelButtonText ? options.cancelButtonText : defaultOptions.cancelButtonText
  options.type = options.type ? options.type : defaultOptions.type

  return new Promise((resolve, reject) => {
    MessageBox.confirm(message, '提示', options).then(() => {
      resolve();
    }).catch(() => {
      reject();
    });
  })
}

new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})
